查看原文
其他

带空检功能的STM32芯片启动模式话题

【转载】 茶话MCU 2022-09-11


温馨提示:图片可点击放大观看


前言

针对客户在使用某些具有空检机制的STM32芯片时碰到的启动模式问题进行分析,并结合不同的调试及烧录工具做了相关配置的介绍。


一、 问题描述

有客户使用STM32L011D4P6,发现尽管已经为Boot0引脚提供了低电平,在利用STVP进行烧录时,需要先利用串口发送0x7F信息(收到0x79回应),然后才能正常连接。同样,利用MDK-ARM开发工具时,也无法直接正确识别芯片。STLINK调试器的设置界面如下所示。



二、 问题分析

结合客户问题的描述可以判断出在MCU上电后,STM32L011D4P6进入了自举程序模式(详细内容参见AN3155)。查看STM32L011D4P6启动模式配置,如下图所示:



在Boot0脚为低电平时,根据Boot配置应该进入main Flash program memory (STM32L011D4P6没有nBOOT_SEL)。利用STVP读出Optionbyte如下所示:



为什么在这种配置情况,还会进入System memory呢? 查看手册可以发现STM32L011x/021x采用了一种有别于STM32L0系列中其它微控制器的启动机制。


该类芯片使用了芯片空检测功能。用于Boot0配置为低电平,初始配置为从用户Flash program memory启动的前提下,先检测Flashprogram memory区是否含有有效用户程序,或者说检测芯片是否为空片。如果属于空片,则转而进入系统自举程序(即从Systemmemory中执行程序),以便对Flash memory进行编程。



通过询问客户得知,出现这种问题的STM32L011D4P6芯片都是没有烧录过用户程序的空片。当在Flash memory中烧录用户程序后,上面连接异常问题消失。


三、 开发工具配置

针对具有这种启动机制的MCU,在使用相关开发工具(例如MDK-ARM, IARfor ARM)时,需要对调试/编程选项进行配置,并需使用STM32L011x/021x的Reset引脚及连接。

ST-Link utility对应的配置(配置位置:Target\Setting)如下所示:



MDK-ARM 对应的配置(配置位置 : Project\Option\Debug\Setting)如下所示:



IAR for ARM对应的配置(配置位置:Project\Option\ST-Link)如下所示:



四、小结

STM32各大系列中,有部分芯片是具有空检功能的。比如STM32F0系列中的STM32F04X/09X,STM32L0系列中的STM32L011x/021x等,它们能够在Flash program memory中无有效用户程序时,自动从用户Flash区启动切换到System memory中的自举程序。要注意的是,在实际开发中需为调试/编程器提供Reset的硬件连接,并做适当配置。


============================

往期话题链接:

1、关于读取STM32 RTC 日历值不更新的话题

2、基于STM32Cube USB设备库应用的几个常见问题

3、利用STM32定时器输出指定脉冲个数的一种方法

4、关于STM32 DMA重新使能的话题

5、STM32CUBE相关技术手册哪里找


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存